import 'package:flutter/material.dart';
import 'package:flutter_architecture/routes/routes.dart';
import 'package:flutter_architecture/viewmodels/theme_view_model.dart';
import 'package:flutter_architecture/utils/log_util.dart';
import 'package:provider/provider.dart';
import 'package:logger/logger.dart';
import 'package:fluttertoast/fluttertoast.dart';

/// App root page
/// todo 获取设备信息
/// todo 动态申请权限
/// todo 广告倒计时页面
/// todo 打包配置（release 签名，jdk）
/// todo android 宿主工程是kotlin
/// @author: dingwen
/// @date: 2021/1/2

class RootAppPage extends StatefulWidget {
  final GlobalKey<NavigatorState> globalRouteKey;

  RootAppPage({this.globalRouteKey}) : assert(globalRouteKey != null);

  @override
  _RootAppPageState createState() => _RootAppPageState();
}

///WidgetsBindingObserver: 监听App生命周期
class _RootAppPageState extends State<RootAppPage> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    //注册App生命周期监听
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  Widget build(BuildContext context) {


    return MaterialApp(
      navigatorKey: widget.globalRouteKey,
      theme: Provider
          .of<ThemeViewModel>(context, listen: true)
          .themeData,
      //是否取消右上角的DEBUG标签
      debugShowCheckedModeBanner: false,

//      initialRoute: "/index",
//      onGenerateRoute: (settings) => Routes.findRoutes(settings: settings),
        onGenerateRoute: Routes.fluroRouter.generator,
      //是否显示性能调试
      showPerformanceOverlay: false,
    );
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      /*
      *应用程序处于非活动状态，没有接收用户输入
      * 在Android上，这对应于一个应用程序或Flutter主机视图运行在前台非活动状态
      * 当其他活动被关注时，应用程序会过渡到这种状态，比如分屏应用程序、电话呼叫、画中画应用程序
      * 系统对话框或另一个窗口
      * 处于这种状态的应用程序应该假设它们可能在任何时候暂停
      * */
      case AppLifecycleState.inactive:
        break;
        /*
        * 应用程序仍然驻留在Flutter引擎上，但是与任何主机视图分离
        * 应用程序处于这种状态时，引擎在没有视图的情况下运行。当引擎第一次初始化时
        * 它可以处于 attaching a view 的过程中或在由于 Navigator pop,view被销毁之后
        * */
      case AppLifecycleState.detached:
        break;
        /*
        应用程序当前对用户不可见，不响应用户输入，并在后台运行。当应用程序处于这种状态时
        引擎将不会调用Window.onBeginFrame和Window.onDrawFrame回调
        应用程序不可见，后台
        * */
      case AppLifecycleState.paused:
        Fluttertoast.showToast(
          msg: "flutter_architecture切换到后台，请注意!", );
        log(level: Level.info,fileName: 'root_app_page.dart',functionName: 'didChangeAppLifecycleState',message: '应用程序切换到后台');
        break;

    }
  }

  @override
  void dispose() {
    super.dispose();
    //移除监听器
    WidgetsBinding.instance.removeObserver(this);
  }
}
